package com.zjsru.plan2025.oneday;

/**
 * 2598. 执行操作后的最大 MEX
 *
 * @Author: cookLee
 * @Date: 2025-10-16
 */
public class FindSmallestInteger {

    /**
     * 主
     * \
     * 输入：nums = [1,-10,7,13,6,8], value = 5
     * 输出：4
     * 解释：执行下述操作可以得到这一结果：
     * - nums[1] 加上 value 两次，nums = [1,0,7,13,6,8]
     * - nums[2] 减去 value 一次，nums = [1,0,2,13,6,8]
     * - nums[3] 减去 value 两次，nums = [1,0,2,3,6,8]
     * nums 的 MEX 是 4 。可以证明 4 是可以取到的最大 MEX 。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        FindSmallestInteger findSmallestInteger = new FindSmallestInteger();
        System.out.println(findSmallestInteger.findSmallestInteger(new int[]{1, -10, 7, 13, 6, 8}, 5));
    }

    public int findSmallestInteger(int[] nums, int value) {
        int[] mp = new int[value];
        for (int i = 0; i < nums.length; i++) {
            //获得余数
            int cnt = ((nums[i] % value) + value) % value;
            mp[cnt]++;
        }
        int result = 0;
        //从0开始递增，找到第一个余数频次为0的位置
        while (mp[result % value] > 0) {
            mp[result % value]--;
            result++;
        }
        return result;
    }

}
